package com.cgt.xiaotao.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cgt.common.domain.dto.PageDTO;
import com.cgt.xiaotao.order.domain.dto.*;
import com.cgt.xiaotao.order.domain.po.Order;
import com.cgt.xiaotao.order.domain.query.OrderAdminQuery;
import com.cgt.xiaotao.order.domain.query.OrderPageQuery;
import com.cgt.xiaotao.order.domain.vo.*;

import java.util.List;

public interface IOrderService extends IService<Order> {
    /**
     * 创建订单
     * @param orderItemDTOS 订单项列表
     * @param couponIds 优惠券列表
     * @return 生成的订单ID
     */
    OrderSnapshot createOrder(List<OrderItemDTO> orderItemDTOS, List<Long> couponIds);

    /**
     * 查询订单
     * @param orderNo 订单编号
     * @return 订单信息
     */
    OrderVO queryOrder(String orderNo);

    /**
     * 生成支付快照
     * @param paymentDTO 支付信息
     * @return 支付快照
     */
    PaymentSnapshot payment(PaymentDTO paymentDTO);

    /**
     * 修改订单信息
     * @param dto 订单信息
     */
    void updateOrder(OrderRenewDTO dto);

    /**
     * 查询支付订单
     * @param orderNo 订单编号
     * @return 支付订单信息
     */
    PaymentVO queryPayment(String orderNo);

    /**
     * 分页查询订单
     * @param query 查询参数
     * @return 订单列表
     */
    PageDTO<OrderListVO> selectPage(OrderPageQuery query);

    /**
     * 获取订单项信息 - 我的订单页面
     * @param orderNo 订单编号
     * @return 订单项信息
     */
    OrderItemVO getOrderItem(String orderNo);

    /**
     * 管理端分页条件查询订单
     * @param query 查询参数
     * @return 订单列表
     */
    PageDTO<OrderAdminDTO> selectAdminPage(OrderAdminQuery query);
}
